package pl.edu.pk.psb.bc.bo;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import pl.edu.pk.psb.bc.assembler.CzasPrzejazduAssembler;
import pl.edu.pk.psb.bc.assembler.OdlegloscAssembler;
import pl.edu.pk.psb.bc.assembler.PrzystanekAssembler;
import pl.edu.pk.psb.bc.dao.CzasPrzejazduDao;
import pl.edu.pk.psb.bc.dao.OdlegloscDao;
import pl.edu.pk.psb.bc.ds.CzasPrzejazduDs;
import pl.edu.pk.psb.bc.ds.OdlegloscDs;
import pl.edu.pk.psb.bc.ds.PolaczenieDs;
import pl.edu.pk.psb.bc.ds.PrzystanekDs;
import pl.edu.pk.psb.bc.dto.CzasPrzejazduDto;
import pl.edu.pk.psb.bc.dto.OdlegloscDto;
import pl.edu.pk.psb.bc.dto.PolaczenieDto;
import pl.edu.pk.psb.bc.dto.PrzystanekDto;
import pl.edu.pk.psb.bc.dto.TrasaDto;

@Component
public class CzasPrzejazduBoImpl implements CzasPrzejazduBo {

	@Autowired
	CzasPrzejazduDao czasPrzejazduDao;

	@Autowired
	OdlegloscAssembler odlegloscAssembler;

	@Autowired
	PrzystanekAssembler przystanekAssembler;
	
	@Autowired
	CzasPrzejazduAssembler czasPrzejazduAssembler;

	@Override
	@Transactional
	public void zapiszCzasy(PolaczenieDto dto, PolaczenieDs ds) {
		List<TrasaDto> trasa = dto.getListaPrzystankowNaTrasie();
		for (int i = 0; i < trasa.size(); i++) {
			TrasaDto ti=trasa.get(i);
			for(int k=i+1; k < trasa.size(); k++){
				TrasaDto tk = trasa.get(k);
					zapiszCzas(ds, ti.getPrzystanek(), ti.getCzasOdjazdu(), tk.getPrzystanek(), tk.getCzasPrzyjazdu());
			}
		}
	}

	@Override
	@Transactional
	public void zapiszCzas(PolaczenieDs polaczenie, PrzystanekDto przystanekPocz,
			Calendar odjazd, PrzystanekDto przystanekKonc, Calendar przyjazd) {
			long czas = przyjazd.getTimeInMillis() - odjazd.getTimeInMillis();
			int minuty = (int) (czas/(60 * 1000));
			CzasPrzejazduDto dto = new CzasPrzejazduDto();
			dto.setCzasPrzejazdu(minuty);
			dto.setPrzystanekPocz(przystanekPocz);
			dto.setPrzystanekKonc(przystanekKonc);
			czasPrzejazduDao.zapisz(czasPrzejazduAssembler.konwertuj(dto, polaczenie));
	}
	
	@Override
	@Transactional
	public void usunCzasy(int idPolaczenia){
		czasPrzejazduDao.usun(idPolaczenia);
	}

	@Override
	public void zmien(PolaczenieDto dto, PolaczenieDs ds) {
		usunCzasy(ds.getId());
		zapiszCzasy(dto, ds);		
	}
}
